#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <string>
using namespace std;

//int main() {
//    string str;
//    cin >> str;
//    int n = str.size();
//    int k = 0;
//    string ret;
//    for (int i = n - 1; i >= 0; i--)
//    {
//        k++;
//        ret += str[i];
//        if (i && k == 3)
//        {
//            ret += ',';
//            k = 0;
//        }
//    }
//    reverse(ret.begin(), ret.end());
//    cout << ret;
//    return 0;
//}
////int main()
////{
////	string str;
////	cin >> str;
////	int n = str.size();
////	for (int i = 0; i < n; i++)
////	{
////		if (str[i] >= 'A' && str[i] <= 'Z')
////		{
////			str[i] = str[i] + 32;
////			cout << str[i];
////		}
////		else if (str[i] >= 'a' && str[i] <= 'z')
////		{
////			cout << str[i];
////		}
////	}
////	return 0;
////}
//
//
//int main() {
//    int n = 0;
//    cin >> n;
//    if (n == 0 || n == 1 || n == 2)
//    {
//        cout << n << endl;
//    }
//    else
//    {
//        long long sum = 0;
//        int ppre = 1;
//        int pre = 2;
//        for (int i = 3; i <= n; i++)
//        {
//            sum = ppre + pre;
//            ppre = pre;
//            pre = sum;
//        }
//        cout << sum << endl;
//    }
//    return 0;
//}
//
//class Solution {
//public:
//    bool IsContinuous(vector<int>& numbers) {
//        // write code here
//        vector<int> pre(14);
//        for (auto v : numbers)
//        {
//            pre[v]++;
//        }
//        int k = pre[0];
//        int sum = 0;
//        int left = 1;
//        int right = 1;
//        while (right < 14)
//        {
//            if (pre[right] > 0)
//            {
//                right++;
//                sum++;
//            }
//            else
//            {
//                if (k == 0)
//                {
//                    while (pre[left])
//                    {
//                        left++;
//                        sum--;
//                    }
//                    left++;
//                    right++;
//                }
//                else
//                {
//                    k--;
//                    right++;
//                    sum++;
//                }
//            }
//            if (sum == 5)
//            {
//                return true;
//            }
//        }
//        return false;
//    }
//};

//bool tf(vector<int>& ret, int l, int r, int p)
//{
//	int left = p - 1;
//	int right = p + 1;
//	if (left >= l && right <= r && ret[left] == ret[right])
//	{
//		return true;
//	}
//	return false;
//}
//
//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	vector<int> ret;
//	int k=m;
//	while (k--)
//	{
//		int p;
//		cin >> p;
//		ret.push_back(p);
//	}
//	while (n--)
//	{
//		int l, r;
//		cin >> l >> r;
//		l -= 1;
//		r -= 1;
//		int h = 0;
//		for (int i = l + 1; i < r; i++)
//		{
//			if (tf(ret, l, r, i))
//			{
//				h = 1;
//				break;
//			}
//		}
//		if (h)
//		{
//			cout << "YES" << endl;
//		}
//		else
//		{
//			cout << "NO" << endl;
//		}
//	}
//	return 0;
//}

int dx[4] = { 0,0,1,-1 };
int dy[4] = { 1,-1,0,0 };
bool dfs[1001][1001] = { 0 };

void dfs_sort(vector<vector<char>>& str, int x, int y,int n)
{
	dfs[x][y] = 1;
	for (int i = 0; i < 4; i++)
	{
		if (x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >= 0 && y + dy[i] < n && !dfs[x + dx[i]][y + dy[i]] && str[x + dx[i]][y + dy[i]] == '#')
		{
			dfs_sort(str, x + dx[i], x + dx[i], n);
		}
	}
}

int main()
{
	int n;
	cin >> n;
	vector<vector<char>> str(n, vector<char>(n));
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> str[i][j];
		}
	}
	int sum = 0;
	queue<pair<int, int>> q;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (str[i][j] == '#' && !dfs[i][j])
			{
				sum++;
				dfs_sort(str, i, j, n);
			}
			if (str[i][j] == '.')
			{
				q.push(pair<int, int>(i, j));
			}
		}
	}
	while (!q.empty())
	{
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		for (int i = 0; i < 4; i++)
		{
			if (x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >= 0 && y + dy[i] < n && str[x + dx[i]][y + dy[i]] == '#')
			{
				str[x + dx[i]][y + dy[i]] = '.';
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			dfs[i][j] == 0;
		}
	}
	int k = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (str[i][j] == '#' && !dfs[i][j])
			{
				k++;
				dfs_sort(str, i, j, n);
			}
		}
	}
	cout << (sum - k) << endl;
	return 0;
}